package com.zhang.authoritycenter.service;

import com.zhang.authoritycenter.common.model.dao.authority.AuthorityMenuDO;
import com.zhang.authoritycenter.common.model.dto.authority.*;
import com.zhang.authoritycenter.common.model.vo.authority.GetMenuVO;
import com.zhang.mysql.model.PageResponseVO;

import java.util.List;

/**
 * <p>
 * 系统菜单表 服务类
 * </p>
 *
 * @author KingHood
 * @since 2023-12-18
 */
public interface IAuthorityMenuService {

    /**
     * 根据父类id，查找子分类，当父类id为null的时候，为根路径
     *
     * @param in 菜单列表信息
     * @return 菜单列表
     * @author zfj
     * @date 2023/12/18
     */
    PageResponseVO<AuthorityMenuDO> queryPageByParentId(MenuQueryPageReqDTO in);

    /**
     * 新建菜单
     *
     * @param in 菜单信息
     * @return 菜单信息
     * @author zfj
     * @date 2023/12/18
     */
    AuthorityMenuDO addMenu(AddMenuReqDTO in);

    /**
     * 获取菜单信息
     *
     * @param id 菜单信息
     * @return 菜单信息
     * @author zfj
     * @date 2023/12/18
     */
    GetMenuVO getMenu(Long id);

    /**
     * 菜单信息修改
     *
     * @param in 菜单信息
     * @return 菜单信息
     * @author zfj
     * @date 2023/12/18
     */
    AuthorityMenuDO updateMenu(UpdateMenuReqDTO in);

    /**
     * 删除多个菜单
     *
     * @param idList 菜单信息
     * @return 菜单信息
     * @author zfj
     * @date 2023/12/18
     */
    Boolean deleteMenu(List<Long> idList);

    /**
     * 菜单排序
     *
     * @param in 菜单信息
     * @return 菜单信息
     * @author zfj
     * @date 2023/12/18
     */
    Boolean changeSort(SystemMenuDragReqDTO in);

    /**
     * 所有菜单
     *
     * @return 菜单信息
     * @author zfj
     * @date 2023/12/18
     */
    List<AuthorityMenuDO> queryAllMenuList(QueryMenuListReqDTO in);

    /**
     * 用户权限范围的菜单
     *
     * @return 菜单信息
     * @author zfj
     * @date 2023/12/18
     */
    List<AuthorityMenuDO> queryMenuListByUserId(QueryMenuListReqDTO in);
}
